import { defineStore } from "pinia";
import { reactive } from "vue";
import { useMapStore } from "./map";
import { useTargetStore } from "./target";
import { generateId } from "@/utils/id";

let id  = 1

export interface Cargo {
    x:number,
    y:number,
    onTarget:boolean,
    id:number
}
export const useCargoStore = defineStore('cargoStore',() => {
    const cargos:Cargo[] =reactive([])
    function createCargo({x,y}:{x:number,y:number}):Cargo {
        return {
            x,
            y,
            onTarget:false,
            id:generateId()
        }
    }
    function addCargo(cargo:Cargo) {
        cargos.push(cargo)
    }
    function findCargo(position:{x:number,y:number}) {
        return cargos.find(cargo => {
            return cargo.x === position.x  && cargo.y === position.y
        })
    }
    function moveCargo(cargo:Cargo,dx:number,dy:number) {  
        const { isWall } = useMapStore()      
        const position = { x:cargo.x + dx,y:cargo.y + dy }

        if(isWall(position))  return false
        if(findCargo(position)) return false

        cargo.x += dx
        cargo.y += dy

        // 放置点检测
        detectionTarget(cargo)

        return true
    }

    function detectionTarget(cargo:Cargo) {
        const { findTarget } = useTargetStore()
        cargo.onTarget =  !!findTarget(cargo)
    }

    function cleanAllCargos() {
        cargos.splice(0,cargos.length)
    }


    return {
        cargos,
        createCargo,
        addCargo,
        findCargo,
        moveCargo,
        cleanAllCargos
    }
})